她盯著那條名為 \\.\pipe\svcctl
的 Pipe,心裡想著:
「曖昧太久,不想玩了!」
明明只要雙方同意,就能透過這條專屬通道交換所有訊息。
可是他總是丟一半的封包,回應卻延遲,像是永遠在忙,永遠不肯建立穩定的 session。
她嘆口氣,把這段心事想成技術筆記:
svcctl → 可以遠端啟動服務,像是她渴望能被認真啟動一次。
atsvc → 能建立排程,卻總是「延遲執行」,就像他的承諾一樣。
winreg → 改變登錄值,就像她不斷調整自己,只求能符合他的設定。
可最後,她決定關閉這條 Named Pipe。
「這不是共享,這只是單向的封包。」
於是她下定決心,closehandle(),把通道釋放掉。
不玩這場曖昧的遊戲了。
想像它是一條「水管」,兩個程式可以透過這條管道傳紙條、送資料。
在 Windows 裡,Named Pipe 的路徑通常長得像這樣:
\\.\pipe\pipename
\.\pipe\ 是固定的開頭,表示「這台機器上的命名管道」。
pipename 就是具體的管道名稱,例如 svcctl、atsvc、winreg。
範例:
\.\pipe\svcctl : 用來遠端控制 Windows Service(Service Control Manager,SCM)。
\.\pipe\atsvc : 用來建立排程工作(Task Scheduler)。
\.\pipe\winreg : 用來存取 Windows Registry。
A 程式寫進去「哈囉」,B 程式就能從另一頭聽到「哈囉」。
有點像兩個房間用紙杯電話在講話。
svcctl
?它是 Windows 服務控制總管(Service Control Manager, SCM)的「專用電話線」。
管理員用它來跟系統說:
「幫我啟動 A 服務」
「把 B 服務停掉」
「新加一個服務」
\\.\pipe\svcctl
就像大樓的總管櫃台,有專線可以打去要求「開電梯」or「關冷氣」。
PSEXESVC.exe
?它是 PsExec 這個遠端工具在目標電腦上臨時安裝的一個小幫手(service)。
PsExec: https://learn.microsoft.com/zh-tw/sysinternals/downloads/psexec
管理員要遠端執行指令 → PsExec 先把 PSEXESVC.exe
丟到對方電腦。
這個小幫手會被啟動,開一條自己的管道(例如 \\.\pipe\psexesvc
)。
管理端透過這條管道,送指令進去,接收執行結果。
用完就會被移除或停掉。
像是請一個臨時工來幫忙搬東西,事情做完,他就消失了。跟渣男一樣。
PsExec 想要在遠端跑程式 → 它會透過 svcctl(服務總管專線)去跟系統說:「請幫我登記一個新服務(PSEXESVC)」
系統同意後,就會看到 新服務被建立。
PSEXESVC 啟動後,自己開一條新的 Named Pipe 來做溝通。
# 我決定放棄你了,我不喜歡這種模糊不清的感覺。